#include "Ubicador.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>

/* ******************************************************************
 *                        PRUEBAS UNITARIAS							*
 * *****************************************************************/
 
/* Función auxiliar para imprimir si estuvo OK o no. */
void print_test(char* name, bool result) {
    printf("%s: %s\n", name, result? "OK" : "ERROR");
}


/* *** Pruebas sobre creación de instancia *** */

void prueba_crear_Ubicador_posicion_erronea () {
	Ubicador_t* ubicacion = Ubicador_crear (-1,3);
	print_test("Prueba Ubicador crear con posicion erronea", !ubicacion);
}

void prueba_crear_Ubicador_archivo_erroneo () {
	Ubicador_t* ubicacion = Ubicador_crear (3,-1);
	print_test("Prueba Ubicador crear con archivo erroneo", !ubicacion);
}

void prueba_crear_Ubicador_valido () {
	Ubicador_t* ubicacion = Ubicador_crear (4,7);
	print_test("Prueba Ubicador creado correctamente", ubicacion != NULL);
	Ubicador_destruir (ubicacion);
}


/* *** Pruebas sobre verPosiciones *** */

void prueba_verPosiciones_validas () {
	Ubicador_t* ubicacion = Ubicador_crear (4,7);
	
	lista_t* posiciones = Ubicador_verPosiciones (ubicacion);
	int* posicion = lista_ver_primero (posiciones);
	print_test("Prueba Ubicador posiciones correctas", *posicion == 4);
	Ubicador_destruir (ubicacion);
}

void prueba_verPosiciones_erroneas () {
	lista_t* posiciones = Ubicador_verPosiciones (NULL);
	print_test("Prueba Ubicador posiciones erroneas", posiciones == NULL);
}


/* *** Pruebas sobre verArchivo *** */

void prueba_verArchivo_valido () {
	Ubicador_t* ubicacion = Ubicador_crear (4,7);
	int arch = Ubicador_verArchivo (ubicacion);
	print_test("Prueba Ubicador archivo valido", arch == 7);
	Ubicador_destruir (ubicacion);
}

void prueba_verArchivo_erroneo () {
	int arch = Ubicador_verArchivo (NULL);
	print_test("Prueba Ubicador archivo erroneo", arch == -1);
}


/* *** Pruebas sobre destrucción de instancia *** */

void prueba_destruir_Ubicador_nulo () {
	Ubicador_destruir (NULL);
}

/* ******************************************************************
 *                        PROGRAMA PRINCIPAL						*
 * *****************************************************************/

int main () {
	printf ("\nCOMIENZO DE PRUEBAS UBICADOR.\n\n");
	
	prueba_crear_Ubicador_posicion_erronea();
	prueba_crear_Ubicador_archivo_erroneo();
	prueba_crear_Ubicador_valido();
	
	prueba_verPosiciones_validas();
	prueba_verPosiciones_erroneas();
	
	prueba_verArchivo_valido();
	prueba_verArchivo_erroneo();
	
	prueba_destruir_Ubicador_nulo();
	
	printf ("\nFIN DE PRUEBAS UBICADOR.\n\n");
	return 0;
}
